<script>
    function callGetUserMedia(haveAccess) {
      return navigator.mediaDevices.getUserMedia({ audio: false, video: true })
        .then(() => {
          if (!haveAccess) {
            throw "getUserMedia() succeeded when the page doesn't have " +
                  "camera access";
          }
        })
        .catch((e) => {
          if (!haveAccess && e.name == "NotFoundError")
            return;
          throw e;
        });
    }

    function callEnumerateDevices(haveAccess) {
      return navigator.mediaDevices.enumerateDevices().then((devices)=>{
        var found = false;
        for (d of devices) {
          if (d.kind == "videoinput") {
              console.log("FOUND CAMERA ", d.deviceId, d.label)
            found = true;
            if (d.deviceId == "" && haveAccess) {
              throw "deviceId must not be empty when camera permission is granted.";
            } else if (d.deviceId != "" && !haveAccess) {
              throw "deviceId must be non-empty only when camera permission is granted.";
            }
            if (d.label != "" && !haveAccess) {
              throw "device label must be empty unless camera permission is granted.";
            }
            // TODO(crbug.com/1065436): Verify that d.label is set when camera
            // permission is granted.
          }
        }
        if (!found) {
          throw "enumerateDevices() didn't return any videoinput devices.";
        }
      });
    }

    // NoPermission is passed in the URL when the page doesn't have camera
    // access.
    var haveAccess = (window.location.href.indexOf("NoPermission") < 0);

    callGetUserMedia(haveAccess)
    .then(() => { return callEnumerateDevices(haveAccess); })
    .then(() => { document.title = "ended"; })
  </script>